package graph;

/**
 * @author Liaorun
 */
public class GraphAdapter {


    public static Graph createGraph(Integer[][] matrix) {
        Graph graph = new Graph();

        for (int i = 0; i < matrix.length; i++) {
            Integer from = matrix[i][0];
            Integer to = matrix[i][1];
            Integer weight = matrix[i][2];

            // 如果没有就生成起点
            if (!graph.nodes.containsKey(from)) {
                graph.nodes.put(from, new Node(from));
            }

            // 如果没有就生成终点
            if (!graph.nodes.containsKey(to)) {
                graph.nodes.put(from, new Node(to));
            }

            // 从图中获取起点和终点
            Node fromNode = graph.nodes.get(from);
            Node toNode = graph.nodes.get(to);

            // 生成连接起点和终点的边
            Edge edge = new Edge(weight, fromNode, toNode);

            // 起点记录终点
            fromNode.nexts.add(toNode);

            // 起点的出度+1
            fromNode.out++;
            // 终点的入度+1
            toNode.in++;

            // 起点记录连接边
            fromNode.edges.add(edge);

            // 图记录连接边
            graph.edges.add(edge);
        }

        return graph;
    }
}
